Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / Reticulum.git / files / docs / manual / _static / copybutton_funcs.js

Displaying Raw • Download


docs/manual/_static/copybutton_funcs.js 0d16e2305eb2f7f350c1202bc0d3c9764bea1b3e (0d16e230) Text, 2.70 KB

Tff7b72function Te6edf3escapeRegExpTb4b4b4(Te6edf3stringTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3stringTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/[.*+?^${}()|[\]\\]/gTb4b4b4, Ta5d6ff'\\$&'Tb4b4b4)Tb4b4b4; T8b949e// $& means the whole matched string
Tb4b4b4}

T8b949e/**
* Removes excluded text from a Node.
*
* @param {Node} target Node to filter.
* @param {string} exclude CSS selector of nodes to exclude.
* @returns {DOMString} Text from `target` with text removed.
*/
Tff7b72export Tff7b72function Te6edf3filterTextTb4b4b4(Te6edf3targetTb4b4b4, Te6edf3excludeTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3clone Tff7b72= Te6edf3targetTb4b4b4.Te6edf3cloneNodeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4; T8b949e// clone as to not modify the live DOM
Tff7b72if Tb4b4b4(Te6edf3excludeTb4b4b4) Tb4b4b4{
T8b949e// remove excluded nodes
Te6edf3cloneTb4b4b4.Te6edf3querySelectorAllTb4b4b4(Te6edf3excludeTb4b4b4)Tb4b4b4.Te6edf3forEachTb4b4b4(Te6edf3node Tb4b4b4=> Te6edf3nodeTb4b4b4.Te6edf3removeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3cloneTb4b4b4.Te6edf3innerTextTb4b4b4;
Tb4b4b4}

T8b949e// Callback when a copy button is clicked. Will be passed the node that was clicked
T8b949e// should then grab the text and replace pieces of text that shouldn't be used in output
Tff7b72export Tff7b72function Te6edf3formatCopyTextTb4b4b4(Te6edf3textContentTb4b4b4, Te6edf3copybuttonPromptTextTb4b4b4, Te6edf3isRegexp Tff7b72= Tff7b72falseTb4b4b4, Te6edf3onlyCopyPromptLines Tff7b72= Tff7b72trueTb4b4b4, Te6edf3removePrompts Tff7b72= Tff7b72trueTb4b4b4, Te6edf3copyEmptyLines Tff7b72= Tff7b72trueTb4b4b4, Te6edf3lineContinuationChar Tff7b72= Ta5d6ff""Tb4b4b4, Te6edf3hereDocDelim Tff7b72= Ta5d6ff""Tb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3regexpTb4b4b4;
Tff7b72var Te6edf3matchTb4b4b4;

T8b949e// Do we check for line continuation characters and "HERE-documents"?
Tff7b72var Te6edf3useLineCont Tff7b72= Tff7b72!Tff7b72!Te6edf3lineContinuationChar
Tff7b72var Te6edf3useHereDoc Tff7b72= Tff7b72!Tff7b72!Te6edf3hereDocDelim

T8b949e// create regexp to capture prompt and remaining line
Tff7b72if Tb4b4b4(Te6edf3isRegexpTb4b4b4) Tb4b4b4{
Te6edf3regexp Tff7b72= Tff7b72new Tffa657RegExpTb4b4b4(Ta5d6ff'^(' Tff7b72+ Te6edf3copybuttonPromptText Tff7b72+ Ta5d6ff')(.*)'Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3regexp Tff7b72= Tff7b72new Tffa657RegExpTb4b4b4(Ta5d6ff'^(' Tff7b72+ Te6edf3escapeRegExpTb4b4b4(Te6edf3copybuttonPromptTextTb4b4b4) Tff7b72+ Ta5d6ff')(.*)'Tb4b4b4)
Tb4b4b4}

Tff7b72const Te6edf3outputLines Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72var Te6edf3promptFound Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72var Te6edf3gotLineCont Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72var Te6edf3gotHereDoc Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72const Te6edf3lineGotPrompt Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3line Tff7b72of Te6edf3textContentTb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff'\n'Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3match Tff7b72= Te6edf3lineTb4b4b4.Te6edf3matchTb4b4b4(Te6edf3regexpTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3match Tff7b72|| Te6edf3gotLineCont Tff7b72|| Te6edf3gotHereDocTb4b4b4) Tb4b4b4{
Te6edf3promptFound Tff7b72= Te6edf3regexpTb4b4b4.Te6edf3testTb4b4b4(Te6edf3lineTb4b4b4)
Te6edf3lineGotPromptTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3promptFoundTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3removePrompts Tff7b72&& Te6edf3promptFoundTb4b4b4) Tb4b4b4{
Te6edf3outputLinesTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3matchTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3outputLinesTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3lineTb4b4b4)
Tb4b4b4}
Te6edf3gotLineCont Tff7b72= Te6edf3lineTb4b4b4.Te6edf3endsWithTb4b4b4(Te6edf3lineContinuationCharTb4b4b4) Tff7b72& Te6edf3useLineCont
Tff7b72if Tb4b4b4(Te6edf3lineTb4b4b4.Te6edf3includesTb4b4b4(Te6edf3hereDocDelimTb4b4b4) Tff7b72& Te6edf3useHereDocTb4b4b4)
Te6edf3gotHereDoc Tff7b72= Tff7b72!Te6edf3gotHereDoc
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72!Te6edf3onlyCopyPromptLinesTb4b4b4) Tb4b4b4{
Te6edf3outputLinesTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3lineTb4b4b4)
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3copyEmptyLines Tff7b72&& Te6edf3lineTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tff7b72=== Ta5d6ff''Tb4b4b4) Tb4b4b4{
Te6edf3outputLinesTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3lineTb4b4b4)
Tb4b4b4}
Tb4b4b4}

T8b949e// If no lines with the prompt were found then just use original lines
Tff7b72if Tb4b4b4(Te6edf3lineGotPromptTb4b4b4.Te6edf3someTb4b4b4(Te6edf3v Tb4b4b4=> Te6edf3v Tff7b72=== Tff7b72trueTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3textContent Tff7b72= Te6edf3outputLinesTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff'\n'Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e// Remove a trailing newline to avoid auto-running when pasting
Tff7b72if Tb4b4b4(Te6edf3textContentTb4b4b4.Te6edf3endsWithTb4b4b4(Ta5d6ff"\n"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3textContent Tff7b72= Te6edf3textContentTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3textContent
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────